#_*_coding:utf-8_*_
from __future__ import unicode_literals

from django.db import models
#导入Django自带的用户认证表
from django.contrib.auth.models import User

# Create your models here.
#设计表结构，没有设计好表结构就不要写代码
#贴子表
class Article(models.Model):
    #unique=True表示不能重复，这里表示帖子名称不能重复
    title = models.CharField(u"文章标题",max_length=255,unique=True)
    #这里Category必须要加引号才能引用下面的class类,这里的注释verbose_namee=u"版块"与上面的在括号前面加u"文章标题"是一样的
    categroy = models.ForeignKey("Category",verbose_name=u"版块")
    #头部的图片,upload_to="uploads"表示在当前目录下创建一个uploads目录放图片
    head_img = models.ImageField(upload_to="uploads")
    #设置了长度表示不能超过255,并且不能为空
    summary = models.CharField(max_length=255)
    #TextField表示不限制输入长度
    content = models.TextField(u"内容")
    #作者只有一个，写一个外键，必须选一个
    author  = models.ForeignKey("UserProfile")
    #发布日期,auto_now=True表示创建的时候则会自动加一个时间
    publist_date = models.DateTimeField(auto_now=True)
    #是否展示，BooleanField代表布尔值，单选
    hidden = models.BooleanField(default=True)
    #优先级，默认设置的1000起
    priority = models.IntegerField(u"优先级",default=1000)

    #默认返回值
    def __unicode__(self):
        #返回帖子名称与作者
        return "<%s,author:%s>" %(self.title,self.author)
#存储所有评论表
class Comment(models.Model):
    #一条新闻可以有多条评论，一个评论只属于一篇文章，所以用一对多ForeignKey
    article = models.ForeignKey(Article)
    #定义谁评论的
    user = models.ForeignKey('UserProfile')
    #评论的父子孙表
    #parent_comment = models.ForeignKey('Comment',)
    #这里的self相当于自己的类名，也就是Comment
    #blank=True表示在后台管理里为空，null=True表示在数据库里为空
    parent_comment = models.ForeignKey('self',related_name='p_comment',blank=True,null=True)
    #评论最大限制
    comment = models.TextField(max_length=1000)
    date = models.DateTimeField(auto_now=True)
    #默认返回值
    def __unicode__(self):
        #返回帖子名称与作者
        return "<%s,user:%s>" %(self.comment,self.user)
#点赞
class ThumbUp(models.Model):
    #点赞的文章
    article = models.ForeignKey('Article')
    #点赞时加上用户名
    user = models.ForeignKey('UserProfile')
    date = models.DateTimeField(auto_now=True)
    #默认返回值
    def __unicode__(self):
        #返回帖子名称与作者
        return "<user:%s>" %(self.user)

#贴子版块表
class Category(models.Model):
    name = models.CharField(max_length=64,unique=True)
    #可设置版块管理员,使用ForeignKey外键关联用户表则只能创建一对多的关系，使用ManyToManyField则能创建多个管理员创建多对多的关系
    admin = models.ManyToManyField('UserProfile')
    def __unicode__(self):
        return self.name

#账户信息表
class UserProfile(models.Model):
    #OneToOneField就是一对一，不能使用使用ForeignKey一对多，因为账号信息不能重复，User是最上面导入的模块,继承了User表，这里就有username password
    user = models.OneToOneField(User)
    name = models.CharField(max_length=32)
    groups = models.ManyToManyField('UserGroup')
    def __unicode__(self):
        return self.name

#用户组表
class UserGroup(models.Model):
    name = models.CharField(max_length=64,unique=True)
    def __unicode__(self):
        return self.name

